home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / BG_SRC.ZIP / BG_STDOP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-25  |  6.9 KB  |  194 lines

  1. /*
  2.  *    B G _ S T D O P . C  -- this file deals with standard opening moves.
  3.  *
  4.  *     O.F.Ransen, 25th March 1995
  5.  */
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <conio.h>
  11. #include "bg.h"
  12.  
  13. /*************************************************************************/
  14.  
  15. #define N_STD_OPENINGS 16
  16. #define NO_MOVE_INDEX   0
  17.  
  18. /*************************************************************************/
  19. /* There is a list of standard opening moves. The index in the look
  20. up table points to a transit to copy. Doubles never occur in opening
  21. moves of course, as shown by the leading diagonal (NO_MOVE_INDEX).
  22.  
  23.                        1st Dice =    1  2  3  4  5  6     2nd Dice */
  24. static short Std_Lut [6][6]     = {{ 0, 1, 2, 3, 4, 5},    /* 1 */
  25.                                    { 1, 0, 6, 7, 8, 9},    /* 2 */
  26.                                    { 2, 6, 0,10,11,12},    /* 3 */
  27.                                    { 3, 7,10, 0,13,14},    /* 4 */
  28.                                    { 4, 8,11,13, 0,15},    /* 5 */
  29.                                    { 5, 9,12,14,15, 0,}};  /* 6 */
  30.  
  31. static Transit_t Std_Trans [N_STD_OPENINGS] = {
  32.      /* 00 = all doubles, used to init opponents no motion transit */
  33.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,5, 0,0,0,0,3,0, 5,0,0,0,0,0, 0},
  34.        0,
  35.       { 0, 0, 0, 0},
  36.       { 0, 0, 0, 0},
  37.       { 0, 0, 0, 0},
  38.       { 0, 0, 0, 0}},
  39.  
  40.      /* 01 = 2,1 */
  41.      {{0, 1,1,0,0,0,0, 0,0,0,0,0,4, 0,1,0,0,3,0, 5,0,0,0,0,0, 0},
  42.        2,             /* N_Moves */
  43.       {12, 1,0,0},    /* Starting points */
  44.       { 2, 1,0,0},    /* N places moved */
  45.       { 4, 1,0,0},    /* Starting height (0..5) */
  46.       { 0, 0,0,0}},   /* Ending height   (0..5) */
  47.  
  48.      /* 02 = 3,1 */
  49.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,5, 0,0,0,0,2,0, 4,2,0,0,0,0, 0},
  50.        2,             /* N_Moves */
  51.       {17,19,0,0},    /* Starting points */
  52.       { 3, 1,0,0},    /* N places moved */
  53.       { 2, 4,0,0},    /* Starting height (0..5) */
  54.       { 0, 1,0,0}},   /* Ending height   (0..5) */
  55.  
  56.      /* 03 = 4,1, using TD-Gammons move */
  57.      {{0, 1,1,0,0,0,0, 0,0,0,0,0,4, 0,0,0,1,3,0, 5,0,0,0,0,0, 0},
  58.        2,             /* N_Moves */
  59.       {12, 1,0,0},    /* Starting points */
  60.       { 4, 1,0,0},    /* N places moved */
  61.       { 4, 1,0,0},    /* Starting height (0..5) */
  62.       { 0, 0,0,0}},   /* Ending height   (0..5) */
  63.  
  64.      /* 04 = 5,1 */
  65.      {{0, 1,1,0,0,0,0, 0,0,0,0,0,4, 0,0,0,0,4,0, 5,0,0,0,0,0, 0},
  66.        2,           /* N_Moves */
  67.       {1,12,0,0},    /* Starting points */
  68.       {1, 5,0,0},    /* N places moved */
  69.       {1, 4,0,0},    /* Starting height (0..5) */
  70.       {0, 3,0,0}},   /* Ending height   (0..5) */
  71.  
  72.      /* 05 = 6,1 */
  73.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,4, 0,0,0,0,2,2, 5,0,0,0,0,0, 0},
  74.        2,
  75.       {12,17,0,0},
  76.       { 6, 1,0,0},
  77.       { 4, 2,0,0},
  78.       { 0, 1,0,0}},
  79.  
  80.      /* 06 = 2,3 */
  81.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,3, 0,1,1,0,3,0, 5,0,0,0,0,0, 0},
  82.        2,
  83.       {12,12, 0, 0},
  84.       { 3, 2, 0, 0},
  85.       { 4, 3, 0, 0},
  86.       { 0, 0, 0, 0}},
  87.  
  88.      /* 07 = 2,4 */
  89.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,5, 0,0,0,0,2,0, 4,0,2,0,0,0, 0},
  90.        2,
  91.       {17,19, 0, 0},
  92.       { 4, 2, 0, 0},
  93.       { 2, 4, 0, 0},
  94.       { 0, 1, 0, 0}},
  95.  
  96.      /* 08 = 5,2 */
  97.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,3, 0,1,0,0,4,0, 5,0,0,0,0,0, 0},
  98.        2,           /* N_Moves */
  99.       {12,12,0,0},    /* Starting points */
  100.       { 5, 2,0,0},    /* N places moved */
  101.       { 4, 3,0,0},    /* Starting height (0..5) */
  102.       { 3, 0,0,0}},   /* Ending height   (0..5) */
  103.  
  104.      /* 09 = 6,2 */
  105.      {{0, 1,0,0,0,0,0, 1,0,0,0,0,4, 0,1,0,0,3,0, 5,0,0,0,0,0, 0},
  106.        2,           /* N_Moves */
  107.       {1,12,0,0},    /* Starting points */
  108.       {6, 2,0,0},    /* N places moved */
  109.       {1, 4,0,0},    /* Starting height (0..5) */
  110.       {0, 0,0,0}},   /* Ending height   (0..5) */
  111.  
  112.      /* 10 = 3,4 */
  113.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,3, 0,0,1,1,3,0, 5,0,0,0,0,0, 0},
  114.        2,               /* N_Moves */
  115.       {12,12, 0, 0},    /* Starting points */
  116.       { 3, 4, 0, 0},    /* N places moved */
  117.       { 4, 3, 0, 0},    /* Starting height (0..5) */
  118.       { 0, 0, 0, 0}},   /* Ending height   (0..5) */
  119.  
  120.      /* 11 = 5,3 */
  121.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,3, 0,0,1,0,4,0, 5,0,0,0,0,0, 0},
  122.        2,
  123.       {12,12, 0, 0},
  124.       { 5, 3, 0, 0},
  125.       { 4, 3, 0, 0},
  126.       { 3, 0, 0, 0}},
  127.  
  128.      /* 12 = 6,3 */
  129.      {{0, 1,0,0,0,0,0, 0,0,0,1,0,5, 0,0,0,0,3,0, 5,0,0,0,0,0, 0},
  130.        2,           /* N_Moves */
  131.       {1,7,0,0},    /* Starting points */
  132.       {6,3,0,0},    /* N places moved */
  133.       {1,0,0,0},    /* Starting height (0..5) */
  134.       {0,0,0,0}},   /* Ending height   (0..5) */
  135.  
  136.      /* 13 = 5,4 */
  137.      {{0, 2,0,0,0,0,0, 0,0,0,0,0,3, 0,0,0,1,4,0, 5,0,0,0,0,0, 0},
  138.        2,           /* N_Moves */
  139.       {12,12,0,0},    /* Starting points */
  140.       { 5, 4,0,0},    /* N places moved */
  141.       { 4, 3,0,0},    /* Starting height (0..5) */
  142.       { 3, 0,0,0}},   /* Ending height   (0..5) */
  143.  
  144.      /* 14 = 6,4 */
  145.      {{0, 1,0,0,0,0,0, 0,0,0,0,1,5, 0,0,0,0,3,0, 5,0,0,0,0,0, 0},
  146.        2,              /* N_Moves */
  147.       { 1, 7, 0, 0},   /* Starting points */
  148.       { 6, 4, 0, 0},   /* N places moved */
  149.       { 1, 0, 0, 0},   /* Starting height (0..5) */
  150.       { 0, 0, 0, 0}},  /* Ending height   (0..5) */
  151.  
  152.      /* 15 = 6,5 */
  153.      {{0, 1,0,0,0,0,0, 0,0,0,0,0,6, 0,0,0,0,3,0, 5,0,0,0,0,0, 0},
  154.        2,           /* N_Moves */
  155.       {1,7,0,0},    /* Starting points */
  156.       {6,5,0,0},    /* N places moved */
  157.       {1,0,0,0},    /* Starting height (0..5) */
  158.       {0,5,0,0}}};  /* Ending height   (0..5) */
  159.  
  160. /**************************************************************************/
  161.  
  162. extern const Layout_t Initial_Layout ;
  163.  
  164. boolean Standard_Opening (Dice_t*    Dice,
  165.                           Transit_t* My_Old_Tr,  Transit_t* His_Old_Tr,
  166.                           Transit_t* My_Best_Tr, Transit_t* His_Best_Tr)
  167. /*
  168. PURPOSE: To return TRUE if we are at the first move of the game and to
  169. copy in a standard move into the best transits.
  170. */
  171. {
  172.     short Transit_Index ;
  173.  
  174.     if (memcmp (My_Old_Tr->Layout,Initial_Layout,sizeof(Layout_t)) == SAME_STRING) {
  175.         if (memcmp (His_Old_Tr->Layout,Initial_Layout,sizeof(Layout_t)) == SAME_STRING) {
  176.  
  177.             Transit_Index = Std_Lut [Dice->Values[0]-1][Dice->Values[1]-1] ;
  178.             if ((Transit_Index <= 0) || (Transit_Index >= N_STD_OPENINGS)) {
  179.                 Error_Exit ("Bad Transit_Index") ;
  180.             }
  181.             memcpy (My_Best_Tr,&Std_Trans[Transit_Index],sizeof(Transit_t)) ;
  182.             memcpy (His_Best_Tr,&Std_Trans[NO_MOVE_INDEX],sizeof(Transit_t)) ;
  183.  
  184.             Check_Layout (My_Best_Tr->Layout, "Checking My Std Op") ;
  185.             Check_Layout (His_Best_Tr->Layout,"Checking His Std Op") ;
  186.  
  187.             return (TRUE) ;
  188.         }
  189.     }
  190.     return (FALSE) ;
  191. }
  192.  
  193. /**************************************************************************/
  194.